package com.errol.batchprocessor.batchprocessor.advisor;

import com.renjia.entity.AbstractImportBatch;
import com.renjia.service.generic.middleware.batchprocessor.abs.AbstractAdvisor;
import com.renjia.service.generic.middleware.batchprocessor.payload.AbstractBatchPayload;
import com.renjia.service.generic.middleware.batchprocessor.payload.AbstractPiecePayload;
import com.renjia.service.generic.middleware.batchprocessor.payload.AbstractSinglePayload;
import org.springframework.lang.NonNull;

/**
 * 批次开启任务的扩展点
 *
 * @author zhang xiao bin
 * @version v1.0
 * @date 2021/02/23
 * @since v5.0.5
 **/
public interface BatchStartAdvisor<IE extends AbstractImportBatch, AT extends Enum<?>, BE, SE, BP extends AbstractBatchPayload<IE, AT, BE, SE>, PP extends AbstractPiecePayload<SE, SP>, SP extends AbstractSinglePayload<SE>>
        extends AbstractAdvisor<AbstractBatchPayload<IE, AT, BE, SE>> {

    /**
     * 批次启动的扩展点，一般执行批次数据的准备工作
     * 需要注意：分片等待批次启动的超时时间是 4 秒，所以批次启动需考虑用时
     *
     * @param batchPayload 批次数据
     * @return true 表示启动成功，false 表示拦截该批次；该扩展点所有实现只要有一个返回 false，即拦截批次
     */
    boolean doPrepareOnBatchStart(@NonNull BP batchPayload);
}
